﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using QuanLyGiaoDuc_Winform.ServiceXuLyThongTinSinhVien;
using QuanLyGiaoDuc_Winform.ServiceXuLyThongTinKhoa;
using QuanLyGiaoDuc_Winform.ServiceXuLyThongTinHocPhan;


namespace QuanLyGiaoDuc_Winform
{
    public partial class FormTiepNhanSinhVien : Form
    {
        public FormTiepNhanSinhVien()
        {
            InitializeComponent();
        }

        /*-----------------------------------------------------------*/
        ServiceXuLyThongTinSinhVien.ServiceXuLyThongTinSinhVienSoapClient proxy_sinhvien = new ServiceXuLyThongTinSinhVienSoapClient ();
        ServiceXuLyThongTinKhoa.ServiceXuLyThongTinKhoaSoapClient proxy_khoa = new ServiceXuLyThongTinKhoaSoapClient();
        ServiceXuLyThongTinKhoaHoc.ServiceXuLyThongTinKhoaHocSoapClient proxy_khoahoc = new ServiceXuLyThongTinKhoaHoc.ServiceXuLyThongTinKhoaHocSoapClient();


        private ServiceXuLyThongTinKhoa.KHOA_getallResult[] arrKhoa;
        public ServiceXuLyThongTinKhoa.KHOA_getallResult[] ArrKhoa
        {
            get { return arrKhoa; }
            set { arrKhoa = value; }
        }

        private ServiceXuLyThongTinKhoaHoc.KHOAHOC[] arrKhoaHoc;
        public ServiceXuLyThongTinKhoaHoc.KHOAHOC[] ArrKhoaHoc
        {
            get { return arrKhoaHoc; }
            set { arrKhoaHoc = value; }
        }

        public ServiceXuLyThongTinKhoa.KHOA_getallResult[] loadDanhSachKhoa()
        {
            arrKhoa = null;
            arrKhoa = proxy_khoa.layDanhSachKhoa();
            return arrKhoa;
        }

        private int _iNamHocBatDau;

        public int INamHocBatDau
        {
            get { return _iNamHocBatDau; }
            set { _iNamHocBatDau = value; }
        }

        private int _iNamHocKetThuc;

        public int INamHocKetThuc
        {
            get { return _iNamHocKetThuc; }
            set { _iNamHocKetThuc = value; }
        }

        /*--------------Thuoc tinh insert --------------*/

        private int _maKhoaHoc = int.MinValue;
        public int MaKhoaHoc
        {
            get { return _maKhoaHoc; }
            set { _maKhoaHoc = value; }
        }

        private int _maKhoa = int.MinValue;
        public int MaKhoa
        {
            get { return _maKhoa; }
            set { _maKhoa = value; }
        }

        private int _maSinhVien = int.MinValue;
        public int MaSinhVien
        {
            get { return _maSinhVien; }
            set { _maSinhVien = value; }
        }

        private string _tenSinhVien = string.Empty;
        public string TenSinhVien
        {
            get { return _tenSinhVien; }
            set { _tenSinhVien = value; }
        }

        private int _gioiTinh = int.MinValue;
        public int GioiTinh
        {
            get { return _gioiTinh; }
            set { _gioiTinh = value; }
        }

        private DateTime _ngaySinh;
        public DateTime NgaySinh
        {
            get { return _ngaySinh; }
            set { _ngaySinh = value; }
        }

        private string _noiSinh = string.Empty;
        public string NoiSinh
        {
            get { return _noiSinh; }
            set { _noiSinh = value; }
        }

        private string _diaChi = string.Empty;
        public string DiaChi
        {
            get { return _diaChi; }
            set { _diaChi = value; }
        }

        private string _email = string.Empty;
        public string Email
        {
            get { return _email; }
            set { _email = value; }
        }

        private string _soDienThoai = string.Empty;
        public string SoDienThoai
        {
            get { return _soDienThoai; }
            set { _soDienThoai = value; }
        }

        private string _matKhau = string.Empty;
        public string MatKhau
        {
            get { return _matKhau; }
            set { _matKhau = value; }
        }

        private string _tenDangNhap = string.Empty;
        public string TenDangNhap
        {
            get { return _tenDangNhap; }
            set { _tenDangNhap = value; }
        }

        /*------------------------FormTiepNhanSinhVien_Load---------------------------*/
        private void FormTiepNhanSinhVien_Load(object sender, EventArgs e)
        {
            cboKhoaHoc.Enabled = false;
            txtMSSV.Enabled = false;
            txtHoTen.Enabled = false;
            rdoNam.Enabled = false;
            rdoNu.Enabled = false;
            dtmNgaySinh.Enabled = false;
            txtNoiSinh.Enabled = false;
            txtDiaChi.Enabled = false;
            txtEmail.Enabled = false;
            txtSoDienThoai.Enabled = false;
            txtMatKhau.Enabled = false;
            txtTenDangNhap.Enabled = false;

            cboKhoa.Items.Clear();
            loadDanhSachKhoa();
            // load danh sach khoa
            foreach (ServiceXuLyThongTinKhoa.KHOA_getallResult khoa in arrKhoa)
            {
                cboKhoa.Items.Add(khoa.MAKHOA + ". " + khoa.TENKHOA);
            }
        }

        /*------------------------cboKhoa_SelectedIndexChanged---------------------------*/
        private void cboKhoa_SelectedIndexChanged(object sender, EventArgs e)
        {
            int indexCbbKhoa = cboKhoa.SelectedIndex;
            int _indexKhoa = arrKhoa[indexCbbKhoa].MAKHOA;

            cboKhoaHoc.Enabled = true;
            cboKhoaHoc.Items.Clear();

            arrKhoaHoc = null;
            arrKhoaHoc = proxy_khoahoc.layDanhSachKhoaHoc();
            foreach (ServiceXuLyThongTinKhoaHoc.KHOAHOC khoahoc in arrKhoaHoc)
            {
                cboKhoaHoc.Items.Add(khoahoc.NAMBATDAU);
            }

            _maKhoa = arrKhoa[indexCbbKhoa].MAKHOA;

            txtMSSV.Enabled = true;
            txtHoTen.Enabled = true;
            rdoNam.Enabled = true;
            rdoNu.Enabled = true;
            dtmNgaySinh.Enabled = true;
            txtNoiSinh.Enabled = true;
            txtDiaChi.Enabled = true;
            txtEmail.Enabled = true;
            txtSoDienThoai.Enabled = true;
            txtMatKhau.Enabled = true;
            txtTenDangNhap.Enabled = true;
        }

        /*------------------------cboKhoaHoc_SelectedIndexChanged---------------------------*/
        private void cboKhoaHoc_SelectedIndexChanged(object sender, EventArgs e)
        {
            _iNamHocBatDau = int.Parse(cboKhoaHoc.SelectedItem.ToString());
            _iNamHocKetThuc = _iNamHocBatDau + 4;
            int _iKhoaHoc_Choose = cboKhoaHoc.SelectedIndex;
            _maKhoaHoc = arrKhoaHoc[_iKhoaHoc_Choose].MAKHOAHOC;
        }

        /*-----------------------Kiểm tra thông tin Email-----------------------------*/
        public int kiemtraEmail(string email)
        {
            try
            {
                //testing               

                //Chuyển chuỗi email thành char
                char[] arrEmail = email.ToCharArray();
                //kiểm tra thành phần @
                int i = 0;
                while (i < arrEmail.Length && arrEmail[i].CompareTo('@') != 0)
                {
                    char c = arrEmail[i];
                    if ((c.CompareTo('0') >= 0 && c.CompareTo('9') <= 0)
                        || (c.CompareTo('a') >= 0 && c.CompareTo('z') <= 0)
                        || (c.CompareTo('A') >= 0 && c.CompareTo('Z') <= 0)
                        || c.CompareTo('_') == 0)
                    {
                        i++;
                    }
                    else
                    {
                        return 0;
                    }
                }

                i++;
                // nếu kết thúc chuỗi
                if (i == arrEmail.Length)
                    return 0;
                // tìm thành phần .
                while (i < arrEmail.Length && arrEmail[i].CompareTo('.') != 0)
                {
                    char c = arrEmail[i];
                    if ((c.CompareTo('0') >= 0 && c.CompareTo('9') <= 0)
                        || (c.CompareTo('a') >= 0 && c.CompareTo('z') <= 0)
                        || (c.CompareTo('A') >= 0 && c.CompareTo('Z') <= 0))
                    {
                        i++;
                    }
                    else
                    {
                        return 0;
                    }
                }
                i++;
                // nếu kết thúc chuỗi
                if (i == arrEmail.Length)
                    return 0;
                // duyệt thành phần còn lại
                while (i < arrEmail.Length)
                {
                    char c = arrEmail[i];
                    if ((c.CompareTo('0') >= 0 && c.CompareTo('9') <= 0)
                        || (c.CompareTo('a') >= 0 && c.CompareTo('z') <= 0)
                        || (c.CompareTo('A') >= 0 && c.CompareTo('Z') <= 0)
                        || (c.CompareTo('.') == 0))
                    {
                        i++;
                    }
                    else
                    {
                        return 0;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return 1;
        }

        /* -------------------Kiểm tra thông tin nhập vào---------------------- */
        public bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }

        public int iKiemTraThongTinSV()
        {
            // Kiem tra MSSV            
            string MSSV = txtMSSV.Text.Trim();
            if ((this.IsNumber(MSSV)) == false)
            {
                MessageBox.Show("MSSV Phải Là Dạng Chuối Số", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                txtMSSV.Focus();
                return 0;
            }
           
            if (MSSV != "")
            {
                if (txtMSSV.Text.Length < 6 || txtMSSV.Text.Length > 20)
                {
                    MessageBox.Show("Chiều Dài MSSV Nhập Vào Không Hợp Lệ", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                    txtMSSV.Focus();
                    return 0;
                }

            }
            else
            {
                MessageBox.Show("MSSV không được bỏ trống", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                txtMSSV.Focus();
                return 0;
            }
            

            // Kiểm tra tên sinh viên
            string HoTen = txtHoTen.Text.Trim();
            if (HoTen != "")
            {
                if (txtHoTen.Text.Length > 20)
                {
                    MessageBox.Show("Chiều dài tên không hợp lệ (<= 20)", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                    txtHoTen.Focus();
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Họ Tên Không Được Để Trống", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                txtHoTen.Focus();
                return 0;
            }

            // Kiểm tra nhập vào giới tính
            if (rdoNam.Checked == false && rdoNu.Checked == false)
            {
                MessageBox.Show("Vui Lòng Chọn Giới Tính", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                rdoNam.Focus();
                rdoNu.Focus();
                return 0;
            }

            // Kiểm tra thông tin ngày sinh
            if (dtmNgaySinh.Text != "")
            {
                if ((Convert.ToDateTime(dtmNgaySinh.Text)) > DateTime.Now || (DateTime.Now.Year - (Convert.ToDateTime(dtmNgaySinh.Text).Year)) > 100 || (DateTime.Now.Year - (Convert.ToDateTime(dtmNgaySinh.Text).Year)) < 19)
                {
                    MessageBox.Show("Tuổi Nhập Vào Không Hợp Lệ (SV Phải Lớn Hơn 18 Tuổi, Không Quá 100 Tuổi)", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                    dtmNgaySinh.Focus();
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Thông Tin Ngày Sinh Không Được Để Trống", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                dtmNgaySinh.Focus();
                return 0;
            }

            // Kiểm tra thông tin nơi sinh
            string NoiSinh = txtNoiSinh.Text.Trim();
            if (NoiSinh != "")
            {
                if (txtNoiSinh.Text.Length > 50)
                {
                    MessageBox.Show("Chiều dài nơi sinh không hợp lệ (<=50)", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                    txtNoiSinh.Focus();
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Thông tin Nơi Sinh Không Được Để Trống", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                txtNoiSinh.Focus();
                return 0;
            }

            // Kiểm tra thông tin địa chỉ
            if (txtDiaChi.Text.Length > 50)
            {
                MessageBox.Show("Chiều dài địa chỉ không hợp lệ (<=50)", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                txtDiaChi.Focus();
                return 0;
            }

            // Kiểm tra email
            string mail = txtEmail.Text.Trim();
            if (mail == "")
            {
                MessageBox.Show("Vui Lòng Nhập Email", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                txtEmail.Focus();
                return 0;
            }
            if (kiemtraEmail(txtEmail.Text) == 0)
            {
                MessageBox.Show("Email Không Hợp Lệ", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                txtEmail.Focus();
                return 0;
            }

            // Kiểm tra số điện thoại
            if (txtSoDienThoai.Text.Length < 8 || txtSoDienThoai.Text.Length > 20)
            {
                MessageBox.Show("Thông Tin SĐT Không Hợp Lệ", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                txtSoDienThoai.Focus();
                return 0;
            }

            // Kiểm tra tên đăng nhập
            // Kiểm tra thông tin chiều dài mật khẩu
            string MatKhau = txtMatKhau.Text.Trim();
            if (MatKhau != "")
            {
                if (txtMatKhau.Text.Length < 6 || (int)txtMatKhau.Text.Length > 20)
                {
                    MessageBox.Show("Chiều dài mật khẩu không hợp lệ", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                    txtMatKhau.Focus();
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Thông Tin Mật Khẩu Không Được Để Trống", "LỖI", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                txtMatKhau.Focus();
                return 0;
            }

            return 1;
        }

        /*------------------------btnLuu_Click---------------------------*/
        private void btnLuu_Click(object sender, EventArgs e)
        {
             if (iKiemTraThongTinSV() == 0)
                {
                    return;
                }
                // Nếu dữ liệu nhập hợp lệ
              _maSinhVien = int.Parse(txtMSSV.Text);

                string tensinhvien = txtHoTen.Text.Trim();
                _tenSinhVien = tensinhvien;
                if (rdoNam.Checked)
                {
                    _gioiTinh = 1;
                }
                else
                {
                    _gioiTinh = 0;
                }
                _ngaySinh = Convert.ToDateTime(dtmNgaySinh.Text);
                _noiSinh = txtNoiSinh.Text;
                _diaChi = txtDiaChi.Text;
                _email = txtEmail.Text;
                _soDienThoai = txtSoDienThoai.Text;
                _matKhau = txtMatKhau.Text;
                _tenDangNhap = txtTenDangNhap.Text;
                int ketqua = proxy_sinhvien.themSinhVien(_maSinhVien, _maKhoa, _maKhoaHoc, _tenSinhVien, _gioiTinh, _ngaySinh, _noiSinh, _diaChi, _email, _soDienThoai, _matKhau, _tenDangNhap);

                if (ketqua == 1)
                {
                    MessageBox.Show("Thêm Thông Tin Sinh Viên Thành Công", "THÔNG BÁO", MessageBoxButtons.OKCancel, MessageBoxIcon.None);
                    
                }
                else
                {
                    MessageBox.Show("Có Lỗi Phát Sinh Trong Quá Trình Thêm", "THÔNG BÁO", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                    
                }           
        }

        private void btnDong_Click(object sender, EventArgs e)
        {
            Close();
        }

    }
}